package com.ecube.protocol.charge;

import com.ecube.protocol.common.ProtocolFunction;
import com.ecube.protocol.enums.ChargeFunctionEnum;
import lombok.Data;

import java.util.List;

/**
 * 充放电状态
 *
 * @author zhuweijun
 * @version 1.0.0
 * @since 2025/8/11 13:40
 */
@Data
@ProtocolFunction(type = ChargeFunctionEnum.class, value = "CHARGE_STATE")
public class ChargeChargeState {

    /**
     * 充放电设备编码
     */
    private String chgCode;

    /**
     * 充放电接口序号数组
     */
    private List<Integer> gunCodeArray;

    /**
     * 开始充放电时间
     */
    private String startTime;

    /**
     * 充放电时长
     */
    private Integer chgTime = 3600;

    /**
     * 充放电总输出电压
     */
    private Float chgOutputVolt = 220.00F;

    /**
     * 充放电总输出电流
     */
    private Float chgOutputCurr = 110.00F;

    /**
     * 充放电电量
     */
    private Float chgQty = 200.00F;

    /**
     * 电池ID
     */
    private String batID = "125620250812";

    /**
     * SOC
     */
    private Float soc = 35.0F;

    /**
     * 额定容量
     */
    private Float capacity = 430.0F;

    /**
     * 电池类型
     */
    private Integer batType = 1;

    /**
     * 电压需求
     */
    private Float voltDemand = 220.0F;

    /**
     * 电流需求
     */
    private Float currDemand = 110.0F;

    /**
     * 充放电模式
     */
    private Integer chgMode = 1;

    /**
     * 剩余充放电时长
     */
    private Integer remainderChgTime = 60;

    /**
     * 累计充放电时长
     */
    private Integer totalChgTime = 120;

    /**
     * 累计充放电次数
     */
    private Integer totalChgCount = 1200;

    /**
     * 车辆VIN
     */
    private String vin;

    /**
     * 最高单体电压
     */
    private Float maxVolt = 230.0F;

    /**
     * 最高单体电压组号
     */
    private Integer maxVoltNo = 1;

    /**
     * 最低单体电压
     */
    private Float minVot = 20.0F;

    /**
     * 最低单体电压组号
     */
    private Integer minVoltNo = 1;

    /**
     * 最高温度
     */
    private Float maxTemp = 23.0F;

    /**
     * 最高温度组号
     */
    private Integer maxTempNo = 1;

    /**
     * 最低温度
     */
    private Float minTemp = 2.3F;

    /**
     * 最低温度组号
     */
    private Integer minTempNo = 1;

    /**
     * 充放电流水号
     */
    private String orderSn;

    /**
     * 充放电接口集合
     */
    private List<GunInfo> gunList;

    /**
     * 充放电模块集合
     */
    private List<ModuleInfo> moduleList;

    /**
     * 单个充放电接口
     */
    @Data
    public static class GunInfo {
        /**
         * 充放电接口序号
         */
        private Integer code;
        /**
         * 所属终端编码
         */
        private String termCode;

        /**
         * 电压
         */
        private Float volt = 230.0F;

        /**
         * 电流
         */
        private Float curr = 110.0F;

        /**
         * 温度
         */
        private Integer temp = 23;
    }

    /**
     * 单个充放电模块
     */
    @Data
    public static class ModuleInfo {

        /**
         * 模块序号
         */
        private Integer moduleNo;

        /**
         * 充放电接口序号
         */
        private Integer gunNo;

        /**
         * 电压
         */
        private Float volt = 230.0F;

        /**
         * 电流
         */
        private Float curr = 110.0F;

        /**
         * 温度
         */
        private Integer temp = 23;
    }
}
